import NextAuth, { NextAuthOptions } from "next-auth" import CredentialsProvider from "next-auth/providers/credentials" import { login } from "@/src/services/auth/AuthServices" import ApiClientServer from "@/src/services/ApiClientServer" const authOptions: NextAuthOptions = { providers: [ CredentialsProvider({ id: "credentials-login", name: "Email and Password", credentials: { email: { label: "Email", type: "email", placeholder: "Your Email" }, password: { label: "Password", type: "password" }, }, async authorize(credentials, req) { const data = { email: credentials?.email as string, password: credentials?.password as string, } try { const response = await login(data.email, data.password, false, {}) if (response.status === 200) { let token = response.data.access_token; if (token == undefined) { return null; } return response.data } else { console.log("HTTP error! Status:", response.status) } } catch (error) { console.log("Error", error) } return null }, }), CredentialsProvider( { id: "token-login", name: "Token Login", type: "credentials", credentials: { token: { label: "Token", type: "text", }, chatbot: { label: "Chatbot", type: "text", } }, async authorize(credentials: any) { const { token, chatbot } = credentials; const response = await ApiClientServer.post( "/chat/validate/token", { token: token, id_chatbot: chatbot, }, { headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, } ); if (!response.status || response.status !== 200) { return null; } const result = response.data; if (result.token !== null || result.user !== null) { return result; } return null; } }, ), ], callbacks: { async jwt({ token, account, user }) { if (user) { token.user = user.user token.accessToken = user.access_token } return token }, async session({ session, token }) { session.accessToken = token.accessToken as string session.user = token.user return session }, }, pages: { signIn: `${process.env.ASSET_PREFIX}/chat/login`, }, } const handler = NextAuth(authOptions) export { handler as GET, handler as POST }